# -*- coding: utf-8 -*-

# 练习使用多进程 在mac linux可以使用fork()方法，但是在windows中， 没有这样方法， 可以使用multiprocessing代替

import time
from multiprocessing import Process, Pool, Queue
import os
import random

def show_time(name):
    print name, time.time(), os.getpid()
    time.sleep(random.random() * 1)

# 进程池
def mutil_process():
    p = Pool()
    for i in range(1, 5):
        p.apply_async(show_time, args=('name',))

    p.close()
    p.join()

q = Queue(5)

# 进程通讯
# 向队列里写数据
def w_q(name):
    q.put(name)
    print 'write final %s' % name

# 向队列里读取数据
def r_q():
    name = q.get(True)
    print 'read %s' % name

# 通过方法封装， 使用不同的进程向队列里写数据
def w_q_p():
    for x in ['1', '2']:
        p = Process(target=w_q, args=(x,))
        p.start()

# 通过方法封装，从队列里不停的读取数据
def r_q_p():
    while True:
        r_q()

if __name__ == '__main__':
    p = Process(target=show_time, args=('name',))
    p.start()
    p.join()
    print 'process end.'
    mutil_process()

    w_q_p()
    r_q_p()



